package chapter10.single_design_mode;
//懒汉式，当需要用的时候才创建
//不会造成资源的浪费,只有用户想创建对象时才创建对象。
//饿汉式不存在线程安全问题，懒汉式存在线程安全问题
//当多个线程同时想要创建对象时，可能存在先进来的线程还没有创建好对象，其后的线程就会判断也为空，
//之后就又会创建一个新的对象，故存在线程安全问题。
public class SingleTon02 {
    public static void main(String[] args) {
        System.out.println(Cat.n1);
        Cat Instance = Cat.getInstance();
        Cat instance1 = Cat.getInstance();
        System.out.println(instance1);
        System.out.println(Instance);
        System.out.println(Instance==instance1);
    }
}
//希望在程序运行过程中，只能创建一个Cat对象
//使用单例模式
class Cat{
    private String name;
    private static Cat cat;
   public static int n1= 100;

/* 步骤
* 1.仍然构造器私有化
* 2.定义一个public的static静态属性对象
* 3.提供一个public的static方法，可以返回一个Cat对象 */

    private Cat(String name) {
        System.out.println("构造器被调用");
        this.name = name;
    }

    public static Cat getInstance(){
        if (cat == null){
            cat = new Cat("小花");
        }
        return cat;
    }

    @Override
    public String toString() {
        return "name ="+ name;
    }
}